﻿using QuanLyThuVien.DTO;
using QuanLyThuVien.DAL;
using QuanLyThuVien.DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;

namespace QuanLyThuVien.BLL
{
    //----------------------------------------------------------------------
    //Desc: class xử lý cho bảng PHIEUNHAP
    //----------------------------------------------------------------------
    public class BLLPhieuNhap
    {
        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public BLLPhieuNhap()
        { }

        //----------------------------------------------------------------------
        //Desc: lấy danh sách phiếu nhập
        //----------------------------------------------------------------------
        public DataTable LayDanhSachPhieuNhap()
        {
            DALPhieuNhap _dalPhieuNhap = new DALPhieuNhap();
            return _dalPhieuNhap.LayDanhSachPhieuNhap();
        }

        //----------------------------------------------------------------------
        //Desc: lấy phiếu nhập
        //----------------------------------------------------------------------
        public DTOPhieuNhap LayPhieuNhap(string maphieunhap)
        { 
            DALPhieuNhap _dalPhieuNhap = new DALPhieuNhap();
            DTOPhieuNhap phieunhap = _dalPhieuNhap.LayPhieuNhap(maphieunhap);
            if (phieunhap == null)
                return null;

            DALCT_PhieuNhap _dalCT_PhieuNhap = new DALCT_PhieuNhap();
            List<DTOCT_PhieuNhap> dsct_pn = _dalCT_PhieuNhap.LayDSCT_PhieuNhap(maphieunhap);
            if (dsct_pn == null)
                return null;
            else
                phieunhap.DSCTPhieuNhap = dsct_pn;

            DALSach _dalSach = new DALSach();
            for (int i = 0; i < phieunhap.DSCTPhieuNhap.Count; i++)
            {
                DTOSach sach = _dalSach.LaySach(phieunhap.DSCTPhieuNhap[i].Sach.MaSach);
                if (sach != null)
                    phieunhap.DSCTPhieuNhap[i].Sach = sach;
            }
                return phieunhap;
        }

        //----------------------------------------------------------------------
        //Desc: đếm phiếu nhập
        //----------------------------------------------------------------------
        public int DemPhieuNhap()
        {
            DALPhieuNhap _dalPhieuNhap = new DALPhieuNhap();
            return _dalPhieuNhap.DemPhieuNhap();
        }

        //----------------------------------------------------------------------
        //Desc: đếm mã phiếu nhập
        //----------------------------------------------------------------------
        public int DemMaPhieuNhap(string maphieunhap)
        {
            DALPhieuNhap _dalPhieuNhap = new DALPhieuNhap();
            return _dalPhieuNhap.DemMaPhieuNhap(maphieunhap);
        }

        //----------------------------------------------------------------------
        //Desc: phát sinh mã phiếu nhập
        //----------------------------------------------------------------------
        public bool PhatSinhMaPhieuNhap(ref DTOPhieuNhap phieunhap)
        {
            DALPhieuNhap _dalPhieuNhap = new DALPhieuNhap();
            int stt = _dalPhieuNhap.DemPhieuNhap();
            if (stt < 0)
                return false;
            if (stt == 0)
                stt++;
            string maphieunhap = "PNH" + stt.ToString("D3");
            int dem = _dalPhieuNhap.DemMaPhieuNhap(maphieunhap);
            while (dem > 0)
            {
                stt++;
                maphieunhap = "PNH" + stt.ToString("D3");
                dem = _dalPhieuNhap.DemMaPhieuNhap(maphieunhap);
            }

            if (dem < 0)
                return false;

            phieunhap.MaPhieuNhap = maphieunhap;
            for (int i = 0; i < phieunhap.DSCTPhieuNhap.Count; i++)
                phieunhap.DSCTPhieuNhap[i].MaPhieuNhap = maphieunhap;

            return true;
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật phiếu nhập
        //----------------------------------------------------------------------
        public bool CapNhat(DTOPhieuNhap phieunhap)
        {
            DALPhieuNhap _dalPhieuNhap = new DALPhieuNhap();
            return _dalPhieuNhap.CapNhat(phieunhap);
        }
    }
}
